package de.cbf.cam.dsa.person.extension.interfaces;

import java.util.Map;

import de.cbf.cam.dsa.person.generator.exception.PersonGenerationException;
import de.cbf.cam.dsa.rcp.model.entities.CultureDSA;
import de.cbf.cam.dsa.rcp.model.entities.ProfessionDSA;
import de.cbf.cam.dsa.rcp.model.entities.RaceDSA;
import de.cbf.cam.dsa.services.interfaces.rcp_provider.IServiceDSARCPFinder;
import de.cbf.cam.dsa.services.interfaces.rcp_provider.exceptions.EntityNotFoundException;
import de.cbf.util.uuidheader.entities.UUIDReference;
import de.cbf.util.uuidheader.entities.UUIDHeader;
import de.cbf.util.uuidheader.interfaces.INamed;

public interface IRCPGenerator extends INamed{

	public static final String PROVIDER_RACE 		= IServiceDSARCPFinder.PROVIDER_RACE;
	public static final String PROVIDER_CULTURE 	= IServiceDSARCPFinder.PROVIDER_CULTURE;
	public static final String PROVIDER_PROFESSION 	= IServiceDSARCPFinder.PROVIDER_PROFESSION;
	//TODO javaDoc
	public UUIDHeader resolveEntity(UUIDReference nameUUID, String provider)
			throws EntityNotFoundException;

	public RaceDSA provideRaceBy(CultureDSA culture, ProfessionDSA profession,Map<String,Object> properties)
			throws PersonGenerationException;

	public CultureDSA provideCultureBy(RaceDSA race, ProfessionDSA profession,Map<String,Object> properties)
			throws PersonGenerationException;

	public ProfessionDSA provideProfessionBy(RaceDSA race, CultureDSA culture,Map<String,Object> properties)
			throws PersonGenerationException;

}